package controllers;

import play.*;
import play.mvc.*;
import play.data.validation.*;

import java.sql.SQLException;
import java.util.*;

import models.*;

public class Application extends Controller {

	@Before
	static void addUser() {
		User user = connected();
		if (user != null) {
			renderArgs.put("user", user);
		}
	}

	static User connected() {
		if (renderArgs.get("user") != null) {
			return renderArgs.get("user", User.class);
		}
		String username = session.get("user");
		if (username != null) {
			return User.find("byUsername", username).first();
		}
		return null;
	}

	public static void index() {
		render();
	}

	public static void inserir() {
		if (connected().admin)
			render();
		else
			welcome();
	}

	public static void registro() {
		render();
	}

	public static void pesquisar() {
		render();
	}

	public static void busca() {
		render();
	}

	public static void saveUser(@Valid User user, String verifyPassword) {
		validation.required(verifyPassword);
		validation.equals(verifyPassword, user.password).message(
				"Your password doesn't match");
		if (validation.hasErrors()) {
			render("@registro", user, verifyPassword);
		}
		user.create();
		session.put("user", user.username);
		flash.success("Welcome, " + user.name);
		welcome();
	}

	public static void adicionarMaterial(Materiais novoMateriais,
			Aplicacao aplicacao1, Aplicacao aplicacao2, Aplicacao aplicacao3,
			CategoriaNBR categoriaNBR, MaterialBase materialBaseNBR, Tipo tipo,
			PropriedadesTermicas propriedadesTermicas, Resultados resultados)
			throws SQLException {

		// Realiza as operações no banco de dados
		Operacoes novaOperacao = new Operacoes();

		// Transfere os dados para ser feito a inserção no banco de dados
		novaOperacao.inserirNovoMaterial(novoMateriais, propriedadesTermicas,
				resultados, categoriaNBR, materialBaseNBR, tipo, aplicacao1,
				aplicacao2, aplicacao3);

		inserido();

	}

	public static void inserido() throws SQLException {
		Operacoes novaOperacao = new Operacoes();
		List<Object> lista = novaOperacao.consultar();
		User user = connected();
		render(lista, user);
	}

	public static void login(String username, String password) {
		User user = User.find("byUsernameAndPassword", username, password)
				.first();
		if (user != null) {
			session.put("user", user.username);
			flash.success("Welcome, " + user.name);
			if (user.admin)
				admin();
			else
				welcome();
		}
		// Cola
		flash.put("username", username);
		flash.error("Login failed");
		index();
	}

	public static void logout() {
		session.clear();
		index();
	}

	public static void remover(int id) throws SQLException {
		Operacoes novaOperacao = new Operacoes();
		novaOperacao.remover(id);
		inserido();
	}

	public static void welcome() {
		render();
	}

	public static void zonas(int zona) {
		render(zona);
	}

	public static void admin() {
		render();
	}
}